package com.guiwu.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
 * 启动时数据库连接检查器
 * 在应用启动时检查数据库连接是否正常
 */
@Component
public class StartupDatabaseChecker implements CommandLineRunner {

    @Autowired
    private DataSource dataSource;

    @Override
    public void run(String... args) throws Exception {
        try (Connection connection = dataSource.getConnection()) {
            System.out.println("✅ 数据库连接成功！");
            System.out.println("数据库URL: " + connection.getMetaData().getURL());
            System.out.println("数据库用户: " + connection.getMetaData().getUserName());
            System.out.println("数据库产品: " + connection.getMetaData().getDatabaseProductName());
            System.out.println("数据库版本: " + connection.getMetaData().getDatabaseProductVersion());
            
            // 检查用户表是否存在以及是否有测试用户
            try (PreparedStatement stmt = connection.prepareStatement("SELECT COUNT(*) FROM user WHERE username = 'admin'")) {
                ResultSet rs = stmt.executeQuery();
                if (rs.next()) {
                    int count = rs.getInt(1);
                    if (count > 0) {
                        System.out.println("✅ 测试用户 'admin' 存在，可以使用密码 '123456' 登录");
                    } else {
                        System.out.println("⚠️ 测试用户 'admin' 不存在，请先运行数据库初始化脚本");
                    }
                }
            } catch (Exception e) {
                System.out.println("⚠️ 无法检查用户表，可能需要先创建数据库表: " + e.getMessage());
            }
            
        } catch (Exception e) {
            System.err.println("❌ 数据库连接失败！");
            System.err.println("错误信息: " + e.getMessage());
            System.err.println("请检查：");
            System.err.println("1. 数据库服务是否启动");
            System.err.println("2. 数据库连接配置是否正确");
            System.err.println("3. 网络连接是否正常");
            System.err.println("4. 数据库 'guiwu' 是否存在");
            e.printStackTrace();
        }
    }
}
